package com.hongpu.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hongpu.domain.MultiTenant;
import com.hongpu.dto.MultiTenantDto;
import com.hongpu.enums.TenantStatusEnum;
import com.hongpu.service.MultiTenantService;
import com.hongpu.utils.ResultDto;
import com.hongpu.vo.SelectOptionVo;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 张玉胜
 * @since 2025年05月30日
 */
@RestController
@RequestMapping("/multiTenant")
public class MultiTenantController {
    @Autowired
    MultiTenantService multiTenantService;


    /**
     * 租户状态下拉列表
     */
    @GetMapping("/tenantStatusList")
    public ResultDto tenantStatusList() {
        List<SelectOptionVo> optionList = new ArrayList<>();
        TenantStatusEnum[] tenantStatusEnums = TenantStatusEnum.values();
        if (tenantStatusEnums != null && tenantStatusEnums.length > 0) {
            for (TenantStatusEnum tenantStatusEnum : tenantStatusEnums) {
                SelectOptionVo<String> optionVo = new SelectOptionVo();
                optionVo.setLabel(tenantStatusEnum.getMessage());
                optionVo.setValue(tenantStatusEnum.getStatus());
                optionList.add(optionVo);
            }
        }
        return ResultDto.ok(optionList);
    }

    /**
     * 新增
     */
    @PostMapping("/add")
    public ResultDto add(@RequestBody MultiTenant multiTenant) {
        return multiTenantService.add(multiTenant);
    }

    /**
     * 修改
     */
    @PostMapping("/update")
    public ResultDto update(@RequestBody MultiTenant multiTenant) {
        boolean updated = multiTenantService.updatedById(multiTenant);
        if (!updated) {
            return ResultDto.fail();
        }
        return ResultDto.ok();
    }

    /**
     * 删除
     */
    @GetMapping("/delete/{tenantId}")
    public ResultDto delete(@PathVariable("tenantId") Long tenantId) {
        return multiTenantService.updateStatusDeleted(tenantId);
    }

    /**
     * 暂停
     */
    @GetMapping("/suspended/{tenantId}")
    public ResultDto suspended(@PathVariable("tenantId") Long tenantId) {
        return multiTenantService.updateStatusSuspended(tenantId);
    }

    /**
     * 启用
     */
    @GetMapping("/active/{tenantId}")
    public ResultDto active(@PathVariable("tenantId") Long tenantId) {
        return multiTenantService.updateStatusActive(tenantId);
    }

    /**
     * 分页查询
     */
    @PostMapping("/page")
    public ResultDto page(@RequestBody MultiTenantDto multiTenantDto) {
        IPage<MultiTenant> multiTenantIPage = multiTenantService.selectPage(multiTenantDto);
        return ResultDto.ok(multiTenantIPage);
    }

    /**
     * 所有租户的下拉列表
     */
    @GetMapping("/tenantList")
    public ResultDto tenantList() {
        List<SelectOptionVo> optionList = new ArrayList<>();
        List<MultiTenant> multiTenants = multiTenantService.getAllTenant();
        if (CollectionUtils.isNotEmpty(multiTenants)) {
            for (MultiTenant multiTenant : multiTenants) {
                SelectOptionVo<Long> optionVo = new SelectOptionVo();
                optionVo.setLabel(multiTenant.getTenantName());
                optionVo.setValue(multiTenant.getTenantId());
                optionList.add(optionVo);
            }
        }
        return ResultDto.ok(optionList);
    }

    /**
     * 租户详情
     */
    @GetMapping("/detail/{tenantId}")
    public ResultDto detail(@PathVariable("tenantId") Long tenantId) {
        MultiTenant multiTenant = multiTenantService.detail(tenantId);
        return ResultDto.ok(multiTenant);
    }

}